/*
 * seqFeederFile.h
 *
 *  Created on: 2011-09-04
 *      Author: pawel
 */

#ifndef SEQFEEDERFILE_H_
#define SEQFEEDERFILE_H_
#include"seqFeederV.h"
#include"enumTypes.h"
//#include<string>
//#include<iostream>
#include<fstream>//TODO what i should do with included templates

namespace bpp{
class BasicSequence;
class Alphabet;
}

/*
 * Class implemens interface for fetching sequences from file
 * It can be use as consumer producer buffer
 * Buffer is producer itself.
 */
class seqFeederFile :public seqFeeder{
private:
	/*
	 * sequence alphabet type
	 */
	AlphabetType alpType;
	/*
	 * input file stream
	 */
	std::ifstream inFile;
	/*
	 * pointer to bpp::Alphabet class
	 * it is used to validate input sequence alphabet
	 */
	bpp::Alphabet *alphabetPtr;
public:
	seqFeederFile(const std::string& filename,AlphabetType alpt);
	~seqFeederFile();
	/*
	 * get sequence
	 */
	bpp::BasicSequence* getSeq();
	/*
	 * push sequence.
	 * Epmty function
	 */
	void pushSeq(bpp::BasicSequence*);
	void pushAddParams(seqAlignParams *params, std::string seqName);
	seqAlignParams* getAddParam(std::string seqName);


};


#endif /* SEQFEEDERFILE_H_ */
